package cn.iocoder.yudao.module.contract.utils;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DateTimeParseException;
import java.time.format.TextStyle;
import java.time.temporal.ChronoField;
import java.util.Locale;

public class DateEnFormatUtil {

    // 私有构造函数，防止实例化工具类
    private DateEnFormatUtil() {}
    // 定义一个数组来存储日期的后缀
    private static final String[] SUFFIXES = {"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th",
            "th", "th", "th", "th", "th", "st", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th",
            "th", "th", "th", "st"};

    // 获取日期的序数后缀
    private static String getOrdinalSuffix(int day) {
        if (day % 100 >= 11 && day % 100 <= 13) {
            return SUFFIXES[0]; // 对于11, 12, 13，使用"th"
        }
        return SUFFIXES[day % 10];
    }

    /**
     * 将日期从yyyy-MM-dd格式转换为6th-SEP-2022格式
     *
     * @param inputDate 输入的日期字符串，格式为yyyy-MM-dd
     * @return 转换后的日期字符串，格式为6th-SEP-2022
     * @throws IllegalArgumentException 如果输入的日期字符串格式不正确
     */
    public static String convertToCustomFormat(String inputDate) {
        // 定义输入日期的格式
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        // 解析输入的日期字符串
        LocalDate date;
        try {
            date = LocalDate.parse(inputDate, inputFormatter);
        } catch (Exception e) {
            throw new IllegalArgumentException("输入的日期字符串格式不正确: " + inputDate, e);
        }

        // 获取日期的各个部分
        int day = date.getDayOfMonth();
        String month = date.getMonth().getDisplayName(TextStyle.SHORT, Locale.ENGLISH).toUpperCase();
        int year = date.getYear();

        // 拼接序数后缀
        String ordinalDay = day + getOrdinalSuffix(day);

        // 返回格式化后的字符串
        return ordinalDay + "-" + month + "-" + year;
    }

    /**
     * 将日期从yyyy-MM-dd格式转换为6th-SEP-2022格式
     *
     * @param inputDate 输入的日期字符串，格式为yyyy-MM-dd
     * @return 转换后的日期字符串，格式为6th-SEP-2022
     * @throws IllegalArgumentException 如果输入的日期字符串格式不正确
     */
    public static String convertToCustomFormat(String inputDate,long monthsToAdd) {
        // 定义输入日期的格式
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        // 解析输入的日期字符串
        LocalDate date;
        try {
            date = LocalDate.parse(inputDate, inputFormatter);
            date = date.plusMonths(monthsToAdd);
        } catch (Exception e) {
            throw new IllegalArgumentException("输入的日期字符串格式不正确: " + inputDate, e);
        }

        // 获取日期的各个部分
        int day = date.getDayOfMonth();
        String month = date.getMonth().getDisplayName(TextStyle.SHORT, Locale.ENGLISH).toUpperCase();
        int year = date.getYear();

        // 拼接序数后缀
        String ordinalDay = day + getOrdinalSuffix(day);

        // 返回格式化后的字符串
        return ordinalDay + "-" + month + "-" + year;
    }
    public static void main(String[] args) {
        // 测试转换方法
        String inputDate = "2022-09-01";
        String outputDate = convertToCustomFormat(inputDate,5);
        System.out.println(outputDate); // 输出: 6th-SEP-2022
    }
}
